package org.jeecg.modules.zhouAdmin.admin.alipayrefund;

import com.alibaba.fastjson.JSON;

import java.math.BigDecimal;
import java.util.HashMap;

public class AlipayUtil {

    /**
     * 根据订单对象生成请求参数
     *
     * @param orderSn      商户订单号，商户网站订单系统中唯一订单号，必填
     * @param totalAamount 付款金额，必填
     * @param orderName    订单名称，必填
     * @param body         商品描述，可空
     */
    public static String getContentString(String orderSn, BigDecimal totalAamount, String orderName, String body) {
        HashMap<String, String> map = new HashMap<>();
        // 订单编号
        map.put("out_trade_no", orderSn);
        // 订单金额
        map.put("total_amount", totalAamount.toString());
        // 订单名称
        map.put("subject", orderName);
        // 订单详细信息
        map.put("body", body);
        // 写死的
        map.put("product_code", "FAST_INSTANT_TRADE_PAY");
        // 订单过期时间，超过这个时间没有支付，订单就会失效
        map.put("timeout_express", "5m");
        return JSON.toJSONString(map);
    }

    /**
     * 查询支付宝订单详情
     *
     * @param out_trade_no 商户订单号
     */
    public static String getContentByQuery(String out_trade_no) {
        HashMap<String, String> map = new HashMap<>();
        // 订单编号
        map.put("out_trade_no", out_trade_no);
        return JSON.toJSONString(map);
    }

    /**
     * 封装部分退款json字符串
     *
     * @param out_trade_no   顶动感编号
     * @param refund_amount  退款金额
     * @param refund_reason  退款原因
     * @param out_request_no 标识一次退款请求，同一笔交易多次退款需要保证唯一，如需部分退款，则此参数必传
     */
    public static String getContentRefund(String out_trade_no, BigDecimal refund_amount, String refund_reason, String out_request_no) {
        HashMap<String, String> map = new HashMap<>();
        map.put("out_trade_no", out_trade_no);
        map.put("refund_amount", refund_amount.toString());
        map.put("refund_reason", refund_reason);
        map.put("out_request_no", out_request_no);
        return JSON.toJSONString(map);
    }

    /**
     * 封装全额退款json字符串
     *
     * @param out_trade_no  顶动感编号
     * @param refund_amount 退款金额
     * @param refund_reason 退款原因
     */
    public static String getContentRefundAll(String out_trade_no, BigDecimal refund_amount, String refund_reason) {
        HashMap<String, String> map = new HashMap<>();
        map.put("out_trade_no", out_trade_no);
        map.put("refund_amount", refund_amount.toString());
        map.put("refund_reason", refund_reason);
        return JSON.toJSONString(map);
    }

    /**
     * 封装下载账单json字符串
     *
     * @param billtype 账单类型，商户通过接口或商户经开放平台授权后其所属服务商通过接口可以获取以下账单类型，支持：
     *                 trade：商户基于支付宝交易收单的业务账单；
     *                 signcustomer：基于商户支付宝余额收入及支出等资金变动的帐务账单。
     * @param billdate 账单时间：日账单格式为yyyy-MM-dd，最早可下载2016年1月1日开始的日账单；月账单格式为yyyy-MM，最早可下载2016年1月开始的月账单。
     */
    public static String getContentDownload(String billtype, String billdate) {
        HashMap<String, String> map = new HashMap<>();
        map.put("bill_type", billtype);
        map.put("bill_date", billdate);
        return JSON.toJSONString(map);
    }
}
